<?php

abstract class Nucleo_Model_Paginator {

    static public function getValues(Nucleo_Model_Object $Object,$pageMax,$current, $where = '') {
        //
        settype($pageMax, 'integer');
        settype($current, 'integer');
        
        $return['next']     = 1;
        $return['previous'] = 0;
        $return['limit']    = 0;
        $return['max']      = $pageMax;
        $return['current']  = $current;

        //Total de Objetos no banco de dados
        $countSQL = 'SELECT COUNT('.$Object->getPkName().') as _C_ FROM '.$Object->getTbName().' '.$where;
        $count = Nucleo_Model_Model::exec($countSQL);
        if($count) {
            //Numero total de resultados
            $max = $count->fetch();
            $pag_max =  (ceil(intval($max['_C_'])/$pageMax) * $pageMax) - $pageMax;
        }

        $GET_LIST_START = $current;
        //criando a regra de paginacao
        if(isset($GET_LIST_START) && $GET_LIST_START > 0) {
            settype($GET_LIST_START, 'integer');
            $pag_limit = $GET_LIST_START * $pageMax;
            if($pag_limit >= $max['_C_']) {
                $pag_limit = $pag_max;
            }

            if($GET_LIST_START > 0 && (($GET_LIST_START + 1) * $pageMax) <= $max['_C_']) {
                $pag_start = $GET_LIST_START - 1;
                $pag_end   = $GET_LIST_START + 1;
            }else {
                $pag_end   = $pag_max / $pageMax;
                $pag_start = $pag_end - 1;
            }


            $return['next']     = $pag_end;
            $return['previous'] = $pag_start;
            $return['limit']    = $pag_limit;
            $return['max']      = $pag_max;

        }elseif($current == 0 && ($pageMax ) >= $max['_C_'] ){
            $return['next']     = 0;
        }

        return $return;
    }
}

?>
